package com.zimmor.test;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

/**
 * 生成解析Jwt token令牌
 */
/*
<dependency>
  <groupId>io.jsonwebtoken</groupId>
  <artifactId>jjwt</artifactId>
  <version>0.6.0</version>
</dependency>
 */
public class JwtUtil {

    /**
     * 生成token令牌
     * @param id 用户id
     * @param subject 用户名
     * @param signKey 盐
     * @param expiration token有效时长
     * @return
     */
    public String CreatToken(String id ,String subject, String signKey, long expiration) {
        String token = Jwts.builder()
                .setId(id)
                .setSubject(subject)
                .setIssuedAt(new Date())
                .signWith(SignatureAlgorithm.HS256, signKey)
                .setExpiration(new Date(new Date().getTime()+expiration))
                .compact();
        return token;
    }

    /**
     * 创建没有过期时间的token
     * @param id
     * @param subject
     * @param signKey
     * @return
     */
    public String CreatToken(String id ,String subject, String signKey) {
        String token = Jwts.builder()
                .setId(id)
                .setSubject(subject)
                .setIssuedAt(new Date())
                .signWith(SignatureAlgorithm.HS256, signKey)
                .setExpiration(new Date(new Date().getTime()))
                .compact();
        return token;
    }

    /**
     * 解析Token
     * @param signKey 盐
     * @param token token令牌字符串
     * @return
     */
    public Claims parseToken(String signKey, String token) {
        return Jwts.parser().setSigningKey(signKey).parseClaimsJws(token).getBody();
    }


}
